home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
F1 Licenseware
/
F1 Licenseware - Volume 1.iso
/
disks
/
050a.dms
/
050a.adf
/
TEXTS
/
chapter15.txt
< prev
next >
Wrap
Text File
|
1992-02-26
|
9KB
|
228 lines
The Absolute Beginners Guide To Amos
-------------------------------------
Chapter fifteen
---------------
Now I would like to show you an easy way to detect mouse selections.
There are quite a few ways to set up menus that use the mouse but as we
are trying to learn the basics I will show you the simplest way I could
think of. It`s not the best way but it is straight forward and neat.
If you have already looked at EXAMPLE15.Amos you will have seen how this
system works:
1) We first print some text inside boxes onto the screen
2) We then detect if the user has pressed a mouse key
3) Act on the mouse click
4) If inside a box perform the related task.
5) If outside a box then goto 2)
That is a broad outline of the program I will now go through the program
line for line:
SCREEN OPEN 0,640,200,8,HIRES
-----------------------------
Open a custom screen, simply because it looks nice and gives more room for
text operations and the like.
CHANGE MOUSE 2: PAPER 6: CURS OFF: CLS 6
----------------------------------------
Set the mouse pointer to a cross hair and switch the text cursor off, set
text paper to the same as the background screen colour (6) a nice blue.
UNDER ON
--------
A new command but very straight forward. This simply sets UNDERlined
text to ON, so any text PRINTed from now on will automatically be UNDERlined,
at least until Amos comes to an UNDER OFF statement.
CENTRE "Move the mouse pointer over a box and click left button"
----------------------------------------------------------------
Centralize the forthcoming string of text (This will be underlined as well)
Note: As we haven`t set the text cursor to any specific position yet
the text will appear on line 0.
UNDER OFF
---------
Now turn UNDERlining OFF.
RESERVE ZONE 4
--------------
We will want four menu boxes in this example so we have to reserve space for
them using RESERVE ZONE. Don`t worry why at this stage just remember that
the menus will not work without this command first.
LOCATE 20,10: PRINT BORDER$(ZONE$("BOX 1",1),1)
-----------------------------------------------
We know what the LOCATE and PRINT instructions do.
The rest of the line is as follows:
BORDER$(ZONE$(
---------------
Is always the same (you can leave border$ out if you do not want the box)
"BOX 1"
-------
This is the text you wish to be displayed inside the menu box, in quotes.
,1),1)
------
The first number is the menu I.D for our use (1) and the second 1 is the type
of border pattern we want around the box, ranges are 1 to 16 try out some
different patterns in EXAMPLE15.Amos. If you don`t want borders around your
text then delete the first bracket and the ,1) at the end.
The next three lines are virtually the same except for the text and I.D
number.
DO
--
This is the start of the main loop. A DO LOOP structure in fact. See last
line of this program for more details.
WHILE MOUSE KEY=0: WEND
-----------------------
This excellent and useful little line continually loops until a mouse key is
pressed where upon the program continues. It is very similar to the WAIT KEY
command we have been using but instead uses any mouse button.
Make a note of this mouse wait line for use in your future programs.
The WHILE WEND loop, as it is known, will repeat anything inside the WHILE
and WEND commands repeatedly until a condition is met, in this case a mouse
button click. WHILE can be proceeded by as many commands as you need.
KK=MOUSE ZONE
-------------
Really we do not need this line. What it does is tells the variable KK to
hold the current zone number the mouse pointer is over. If the mouse is not
over any zone at all the value of kk (and mouse zone) will be zero.
We will see why it`s not totally necessary in a moment.
LOCATE 0,20
-----------
Set the text cursor to 0 across 20 down, ready for PRINTing to.
IF KK=1 THEN CENTRE "YOU SELECTED BOX 1"
----------------------------------------
We could also have used IF MOUSE ZONE=1 but KK is quicker and neater to use.
So if KK=1 (the zone the mouse pointer has been clicked over) THEN PRINT etc.
The following two lines are similar except for the text in the quotes.
IF KK=4 THEN CENTRE "YOU SELECTED EXIT": WAIT 50: EDIT
------------------------------------------------------
We have used box 4 as an exit to the program. WAIT enough time for the user
to read the message then goto EDIT mode.
LOOP
----
The mouse key was pressed but KK was not equal to 1,2,3 or 4 so no box was
clicked on (KK equal to 0) so we jump back to the DO part of the DO LOOP
sequence and start checking all over again.
EXAMPLE15.Amos will make it all clear.
Spend a little time with this program and you could knock up some neat little
menus. How about a background picture with the boxes overlaid? Remember that
when you use a picture the palette will change the system colours.
By the way if you load a picture of a different size to a screen you have
previously opened then Amos will change the size of the screen accordingly
for you, so for example if you did this,
SCREEN OPEN 0,640,256,8,hires
Then you loaded a picture which was Lowres 320X200 then Amos would scrap
your hires screen for the dimensions of the newly loaded picture.
The menu program was good as far as simplicity goes but using a similar
method with a few more commands we could make this menu system much more
flexible and neater. Take a look at EXAMPLE15_1.Amos it`s quite an
improvement don`t you think?
As there are only a few commands we haven`t covered in EXAMPLE15_1.Amos and
as it is highly REMmed I will just explain the commands we haven't looked at
yet.
SET ZONE
-------
After using RESERVE ZONE we have to tell Amos exactly in coordinates where
the top left and bottom right corners of each of our selection boxes are.
In the previous example using ZONE$ Amos did this for us.
As the coordinates are hardware coordinates this is a pain so on this disk
in the EXTRAS drawer you will find a program I wrote years ago called
GETZONE.Amos It will allow you to load an IFF picture or ABK SPACKED picture
of any size you then click once on the top right corner of a menu box and
then the bottom right corner the hardware coordinates will then be displayed
for you to write down, press a mouse key and you can do your next menu and so
on.
The good thing about this new menu system we are going to use is you are not
limited to a box for your menu in fact it can be any rectangular shape or
size, within reason of course.
OK so we know our coordinates, we now need to let Amos know them too.
This is where SET ZONE comes in to it. In EXAMPLE15_1.Amos we have three
menu options so we need to set three zones, 1 to 3. These will be the I.D
numbers for our menus throughout the program.
SET ZONE 1, The menu I.D
SET ZONE 1, 256,93 TO And coordinates of the top left edge of menu
SET ZONE 1, 256,93 TO 362,104 And the second set, bottom left coordinates
And that is it. Now just insert the rest of your coordinates like this:
SET ZONE 2,256,109 TO 362,109
etc.
Note: If like in the example program you are unpacking a screen then make
sure you unpack the screen BEFORE SETting ZONEs as they will be cleared.
There are two more commands we have not covered from EXAMPLE15_1.Amos
these are:
GOSUB
and
RETURN
These two commands are related, You GOSUB to a routine and then RETURN from
it when completed.
GOSUB is almost the same as GOTO but has one extra powerful feature the
RETURN part, here is an example,
GOSUB F1
PRINT "I`VE BEEN TO F1"
STOP
F1:
PRINT "I am now in a subroutine"
RETURN
The program goes to the part of the program labelled F1: and executes
commands until it reaches a RETURN instruction, and this is the good part,
the program then continues from the instruction immediately after the GOSUB
call. So what! You may say, what use is that? Well what if we wanted to
execute the same routine lots of times during a program we just call it with
GOSUB then continue executing from after the gosub as if nothing happened.
In Amos the GOSUB has taken a bit of a backseat because of a command called
PROCEDURE and we will be covering that subject very soon, but now you know
about GOTO and GOSUB PROCEDURE will be a lot easier to understand.
For a good example of GOSUB check out Example15_1.Amos.
End of chapter fifteen
^^^^^^^^^^^^^^^^^^^^^^